import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

/**
 * @Author zsj
 * @Version 1.0
 * @Date 2024/3/5 16:59
 * @Description
 */
public class Alg {


    public static void main(String[] args) {
        System.out.println(deleteAndEarn(new int[]{2, 2, 3, 3, 3, 4}));

    }

    /**
     * 给你一个整数数组 nums ，你可以对它进行一些操作。
     * 每次操作中，选择任意一个 nums[i] ，删除它并获得 nums[i] 的点数。之后，你必须删除 所有 等于 nums[i] - 1 和 nums[i] + 1 的元素。
     * 开始你拥有 0 个点数。返回你能通过这些操作获得的最大点数
     */
    public static int deleteAndEarn(int[] nums) {
        int count = 0;
        Arrays.sort(nums);
        List<Integer> list = new ArrayList<>();
        pull(nums, list);
        int end = list.size() - 1;//最大数字索引维护
        while (list.size() != 0) {
            Integer max = list.get(end);
            list.remove(end);
            int deletedNumber = deleteNumber(max, list);//删除
            end -= (deletedNumber + 1);
            count += max;
        }

        return count;
    }

    private static int deleteNumber(Integer max, List<Integer> list) {
        Integer little = max - 1;
        Integer bigger = max + 1;
        int removed = 0;
        for (int i = 0; i < list.size(); i++) {
            if (list.get(i).equals(little) || list.get(i).equals(bigger)) {
                list.remove(i);
                removed++;
            }
        }
        return removed;
    }

    private static void pull(int[] nums, List<Integer> list) {
        for (int i = 0; i < nums.length; i++) {
            list.add(nums[i]);
        }
    }
}
